import jsonpath
import requests

data = {
    "book": [
        {
            'id': 11,
            "goodsId": {
                'id': 1
            }
        },
        {
            'id': 12,
            "goodsId": {
                'id': 2
            }
        },
        {
            'id': 13,
            "goodsId": {
                'id': 3
            }
        },
        {
            'id': 14,
            "goodsId": {
                'id': 4
            }
        }
    ]
}
res = jsonpath.jsonpath(data, "$..book..id")
print('-=====', res)
goods = 10
goodsID = [i for i in res if i > goods]
print('--------', goodsID)
"""
    jsonpath表达式的基本格式规范:
    $表示根节点，也是所有jsonpath表达式的开始
    .表示获取子节点
    ..表示获取所有符合条件的内容
    *代表所有的元素节点
    []表示迭代器的标示(可以用于处理下标等情况)
    [,]表示多个结果的选择
    ?()表示过滤操作
    @表示当前节点
"""
"""
    1.jsonpath 可处理的报文数据类型为dict字典
    2.常规的报文格式是json字符串，转型，json.loads将json转换为字符串
"""
res = jsonpath.jsonpath(data, "$.expensive")
# jsonpath 成功解析-会返回列表list类型
print(res)
# jsonpath错误解析-返回布尔类型false
res = jsonpath.jsonpath(data, "$.expensive1")
print(res)

# 1.获取book节点
res = jsonpath.jsonpath(data, "$.store.book")
print(res)

# 2.获取所有price节点值
res = jsonpath.jsonpath(data, "$..price")
print(res)

# 3.获取store下所有price节点值
res = jsonpath.jsonpath(data, "$.store..price")
print(res)

# 4.获取store下book所有price节点值
res = jsonpath.jsonpath(data, "$.store.book..price")
print(res)

# 5.获取store下所有author的节点值
res = jsonpath.jsonpath(data, "$..author")
print(res)

"""
    1.连接操作符，在结果中合并其他结果的集合
    2.jsonpath运行name或数据索引，类型与xpath
"""
# 1.取前三本书的价格
res = jsonpath.jsonpath(data, "$..book[0,1,2].price")
print(res)

# 2.取最后一本书的价格(jsonpath中不支持使用下标-1，而list支持)
res = jsonpath.jsonpath(data, "$..book[3].price")
print(res)

# 3.切片-按区间取
res = jsonpath.jsonpath(data, "$..book[0:3].price")
print(res)

# 4.获取price大于10的所有book
res = jsonpath.jsonpath(data, "$..book[?(@.price>10)]")
print(res)

# 5.根据作者名获取对应价格
"""
    >
    <
    in
    ==
"""
res = jsonpath.jsonpath(data, "$..book[?('Waugh' in @.author)]")
# res = jsonpath.jsonpath(data, "$..book[?(@.author == 'Evelyn Waugh')]")
print(res)

# * 代表所有节点
res = jsonpath.jsonpath(data, "$..*[?(@.price>10)]")
print(res)

res = jsonpath.jsonpath(data, "$.*")
print(res)

# jsonpath不可拼接
res = jsonpath.jsonpath(data, "$.store.book.title & $.store.book.price")
print("123", res)
